/*
 * @Description  : 下载echart 为表格
 * @Author       : zhao
 * @Date         : 2022-08-04 16:01:07
 * @LastEditors  : zhao
 * @LastEditTime : 2022-08-08 10:08:59
 */

import { computed, unref } from 'vue';
import { ElMessage } from 'element-plus'
export function useDownloadExecl(): any {
    //判断数据是否是文件流
    const analyzeFile = (res: any) => {
        if (res.type === "text/plain" || res.type === "application/json") {

            // 说明是普通对象数据，读取信息
            const fileReader = <any>new FileReader()
            fileReader.onloadend = () => {
                try {
                    const jsonData = JSON.parse(fileReader.result) // 说明是普通对象数据，后台转换失败
                    // 后台信息
                    ElMessage.error(jsonData.msg || "请求出错")
                } catch (err) {
                    // 解析成对象失败，说明是正常的文件流
                    // 下载文件
                    getFileFlow(res)
                }
            }

            fileReader.readAsText(res)

        } else {

            getFileFlow(res)

        }
    }

    //下载文件流
    const getFileFlow = (data: any) => {
        // // 创建blob对象，解析流数据
        const blob = new Blob([data.res], {
            // 设置返回的文件类型
            // type: 'application/pdf;charset=UTF-8' 表示下载文档为pdf，如果是word则设置为msword，excel为excel
            // type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
            type: data.type
        })

        // 这里就是创建一个a标签，等下用来模拟点击事件
        const a = document.createElement('a')
        // 兼容webkix浏览器，处理webkit浏览器中href自动添加blob前缀，默认在浏览器打开而不是下载
        const URL = window.URL || window.webkitURL
        // 根据解析后的blob对象创建URL 对象
        const herf = URL.createObjectURL(blob)
        // 下载链接
        a.href = herf
        // 下载文件名,如果后端没有返回，可以自己写a.download = '文件.pdf'
        a.download = data.fileName || "fileName"
        document.body.appendChild(a)
        // 点击a标签，进行下载 
        a.click()
        // 收尾工作，在内存中移除URL 对象
        document.body.removeChild(a)
        window.URL.revokeObjectURL(herf)
        ElMessage.success("下载成功")
    }
    const downloadExecl = (data: any) => {
        analyzeFile(data)

    }
    return {
        downloadExecl
    };
}